//
//  extension.swift
//  Trans
//
//  Created by zcj on 2024/10/30.
//

import SwiftUI

struct RoundedAndShadowButtonStyle:ButtonStyle {
    func makeBody(configuration: Configuration) -> some View {
        configuration.label
//            .foregroundColor(.white)
//            .padding(EdgeInsets(top: 8, leading: 16, bottom: 8, trailing: 16))
//            .background(
//                RoundedRectangle(cornerRadius: 10)
//                    .foregroundColor(.blue)
//                )
            .compositingGroup()
            // 根据 isPressing 来调整交互动画
//            .shadow(radius:configuration.isPressed ? 0 : 5,x:0,y: configuration.isPressed ? 0 :3)
            .scaleEffect(configuration.isPressed ? 0.8 : 1)
            .animation(.spring(), value: configuration.isPressed)
    }
}

// 快捷引用
extension ButtonStyle where Self == RoundedAndShadowButtonStyle {
    static var roundedAndShadow:RoundedAndShadowButtonStyle {
        RoundedAndShadowButtonStyle()
    }
}

extension Button{
    func nomalStyle() -> some View{
        self.foregroundColor(kcolors.textColor)
            .buttonStyle(.roundedAndShadow)
            .background(
                RoundedRectangle(cornerRadius: 5)
                    .foregroundColor(kcolors.buttonBackgroundColor)
                    .frame(maxWidth: .infinity)
            )
    }
}

extension Color {
    init(hex: String) {
        let hex = hex.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
        var int: UInt64 = 0
        Scanner(string: hex).scanHexInt64(&int)
        let a, r, g, b: UInt64
        switch hex.count {
        case 3: // RGB (12-bit)
            (a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
        case 6: // RGB (24-bit)
            (a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF)
        case 8: // ARGB (32-bit)
            (a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
        default:
            (a, r, g, b) = (1, 1, 1, 0)
        }

        self.init(
            .sRGB,
            red: Double(r) / 255,
            green: Double(g) / 255,
            blue:  Double(b) / 255,
            opacity: Double(a) / 255
        )
    }
}

extension Text{
    func titleStyle()-> some View{
        self.foregroundColor(kcolors.textColor)
            .background(
                RoundedRectangle(cornerRadius: 5)
                    .foregroundColor(kcolors.backgroundColor)
                    .frame(maxWidth: .infinity)
            )
            .font(Font.system(size: 15))
    }
}
